// 链表的合并
// 真题描述：将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有结点组成的。
// 输入：1->2->4, 1->3->4 输出：1->1->2->3->4->4

// 创建链表节点的构造函数
function ListNode (val) {
  this.val = val || ''
  this.next = null
}

const merge2List = (l1, l2) => {
  /**
   * 1. 两个链表比较的时候 先创建一个空的链表用于连接两个链表
   * 2. 指针比较同一个位置两个节点的值的大小，哪个值更小
   * 3. 将最小的值 放入结果链表中，当前链表指针下移，继续比较
   */

  // 需要找到链表要先定义头节点
  const head = new ListNode()
  // 设置当前的链表
  let curr = head
  // 两个链表可能长度不一样 所以当有一条遍历结束之后 所有的遍历就停止 直接将较长链表剩下的部分连接在新链表的后面
  while (l1 && l2) {

    if (l1.value <= l2.value) {
      curr.next = l1
      l1 = l1.next
    } else {
      curr.next = l2
      l2 = l2.next
    }
    //  链表也需要将指针移动到最后一个节点
    curr = curr.next
  }
  // 处理两个链表不等长的情况
  curr = l1 ? l1 : l2
  return head.next
}
